home *** CD-ROM | disk | FTP | other *** search
/ InterCD 2001 October / october_2001.iso / Site Building / Html Notes 1.19 / HTMNOTES.EXE / file0004.bin < prev    next >
Encoding:
Text File  |  2001-08-18  |  41.8 KB  |  1,219 lines

  1. <!DOCTYPE PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <html>
  3. <head>
  4. <title>Clean up your Web pages with HTML TIDY</title>
  5. <meta name="keywords" content=
  6. "HTML, validation, error correction, pretty-printing">
  7. <meta name="author" content="Dave Raggett <dsr@w3.org>">
  8. <style>
  9.   body { 
  10.     margin-left: 10%; 
  11.     margin-right: 10%; 
  12.     font-family: sans-serif
  13.   }
  14.   h1 { margin-left: -8% }
  15.   h2,h3,h4,h5,h6 { margin-left: -4% }
  16.   pre { color: green; font-weight: bold; font-family: monospace}
  17.   em { font-style: italic; color: rgb(0, 0, 153) }
  18.   strong { text-transform: uppercase; font-weight: bold }
  19.   .note {font-style: italic; color: rgb(192, 101, 101) }
  20.   //hr {text-align: center; width: 60% }
  21.   blockquote {
  22.     color: navy;
  23.     font-family: "Comic Sans MS", "Times New Roman", serif
  24.   }
  25.   blockquote.people { text-align: center; }
  26.   table {
  27.     font-family: sans-serif;
  28.     font-size: 80%;
  29.     background: rgb(255,255,153)
  30.   }
  31.   td {
  32.     font-size: 80%
  33.   }
  34.   .people {font-family: "Lucida Calligraphy", serif}
  35.   :link { color: rgb(0, 0, 153) }
  36.   :visited { color: rgb(153, 0, 153) }
  37.   :active { color: rgb(255, 0, 102) }
  38.   :hover { color: rgb(0, 0, 255) }
  39. </style>
  40. </head>
  41. <body bgcolor="#FFFFFF" background="data/grid.gif" text="black" link= 
  42. "navy" vlink="black" alink="red">
  43. <h1 align="center"><img src="data/tidy.gif" width="32" height="32"
  44. align="top" alt="icon"> Clean up your Web pages<br>
  45.  with HTML TIDY</h1>
  46.  
  47. <p align="center"><b>This version 7th July 1999</b></p>
  48.  
  49. <p align="center"><small>Copyright © 1999 <a href= 
  50. "http://www.w3.org">W3C</a>, see <a href="tidy.c">tidy.c</a> for
  51. copyright notice.</small></p>
  52.  
  53. <blockquote>With many thanks to <a href="http://www.hp.com">
  54. Hewlett Packard</a> for financial support during the development
  55. of this software!</blockquote>
  56.  
  57. <hr align="center" width="80%">
  58. <p align="center"><a href="#help">How to use Tidy</a> | <a href= 
  59. "#download">Downloading Tidy</a> | <a href="release-notes.html">
  60. Release Notes</a><br>
  61. <a href="#quotes">Integration with other Software</a> | <a href= 
  62. "#acks">Acknowledgements</a></p>
  63.  
  64. <hr align="center" width="80%">
  65. <p>To get the latest version of Tidy please visit the original
  66. version of this page at: <a href= 
  67. "http://www.w3.org/People/Raggett/tidy">
  68. http://www.w3.org/People/Raggett/tidy</a>. Courtesy of Netmind,
  69. you can register for email reminders when new versions of tidy
  70. become available.</p>
  71.  
  72. <form method="GET" action= 
  73. "http://www.netmind.com/cgi-bin/uncgi/url-mind">
  74. <center><input type="SUBMIT" value="Press Here to Register">
  75. </center>
  76. </form>
  77.  
  78. <p>The public email list devoted to HTML Tidy is: <<a href= 
  79. "mailto:html-tidy@w3.org">html-tidy@w3.org</a>>. To subscribe
  80. send an email to html-tidy-request@w3.org with the word subscribe
  81. in the subject line (include the word unsubscribe if you want to
  82. unsubscribe). The <a href= 
  83. "http://lists.w3.org/Archives/Public/html-tidy/">archive</a> for
  84. this list is acccessible online. Please use this list to report
  85. errors or enhancement requests. See the <a href= 
  86. "release-notes.html"><b>release notes</b></a> for information on
  87. recent changes. Your feedback is welcome!</p>
  88.  
  89. <h3>Introduction to TIDY</h3>
  90.  
  91. <p>When editing HTML it's easy to make mistakes. Wouldn't it be
  92. nice if there was a simple way to fix these mistakes
  93. automatically and tidy up sloppy editing into nicely layed out
  94. markup? Well now there is! Dave Raggett's HTML TIDY is a free
  95. utility for doing just that. It also works great on the
  96. atrociously hard to read markup generated by specialized HTML
  97. editors and conversion tools, and can help you identify where you
  98. need to pay further attention on making your pages more
  99. accessible to people with disabilities.</p>
  100.  
  101. <p>Tidy is able to fix up a wide range of problems and to bring
  102. to your attention things that you need to work on yourself. Each
  103. item found is listed with the line number and column so that you
  104. can see where the problem lies in your markup. Tidy won't
  105. generate a cleaned up version when there are problems that it
  106. can't be sure of how to handle. These are logged as "errors"
  107. rather than "warnings".</p>
  108.  
  109. <h3>Examples of TIDY at work</h3>
  110.  
  111. <p>Tidy corrects the markup in a way that matches where possible
  112. the observed rendering in popular browsers from Netscape and
  113. Microsoft. Here are just a few examples of how TIDY perfects your
  114. HTML for you:</p>
  115.  
  116. <ul>
  117. <li><b>Missing or mismatched end tags are detected and
  118. corrected</b> 
  119.  
  120. <pre>
  121.    <h1>heading
  122.    <h2>subheading</h3>
  123. </pre>
  124.  
  125. <p>is mapped to</p>
  126.  
  127. <pre>
  128.    <h1>heading</h1>
  129.    <h2>subheading</h2>
  130. </pre>
  131. </li>
  132.  
  133. <li><b>End tags in the wrong order are corrected:</b> 
  134.  
  135. <pre>
  136.    <p>here is a para <b>bold <i>bold italic</b> bold?</i> normal?
  137. </pre>
  138.  
  139. <p>is mapped to</p>
  140.  
  141. <pre>
  142.    <p>here is a para <b>bold <i>bold italic</i> bold?</b> normal?
  143. </pre>
  144. </li>
  145.  
  146. <li><b>Fixes problems with heading emphasis</b> 
  147.  
  148. <pre>
  149.    <h1><i>italic heading</h1>
  150.    <p>new paragraph
  151. </pre>
  152.  
  153. <p>In Netscape and Internet Explorer this causes everything
  154. following the heading to be in the heading font size, not the
  155. desired effect at all!</p>
  156.  
  157. <p>Tidy maps the example to</p>
  158.  
  159. <pre>
  160.    <h1><i>italic heading</i></h1>
  161.    <p>new paragraph
  162. </pre>
  163. </li>
  164.  
  165. <li><b>Recovers from mixed up tags</b> 
  166.  
  167. <pre>
  168.    <i><h1>heading</h1></i>
  169.    <p>new paragraph <b>bold text
  170.    <p>some more bold text
  171. </pre>
  172.  
  173. <p>Tidy maps this to</p>
  174.  
  175. <pre>
  176.    <h1><i>heading</i></h1>
  177.    <p>new paragraph <b>bold text</b>
  178.    <p><b>some more bold text</b>
  179. </pre>
  180. </li>
  181.  
  182. <li><b>Getting the <hr> in the right place:</b> 
  183.  
  184. <pre>
  185.    <h1><hr>heading</h1>
  186.    <h2>sub<hr>heading</h2>
  187. </pre>
  188.  
  189. <p>Tidy maps this to</p>
  190.  
  191. <pre>
  192.    <hr>
  193.    <h1>heading</h1>
  194.    <h2>sub</h2>
  195.    <hr>
  196.    <h2>heading</h2>
  197. </pre>
  198. </li>
  199.  
  200. <li><b>Adding the missing "/" in end tags for anchors:</b> 
  201.  
  202. <pre>
  203.    <a href="#refs">References<a>
  204. </pre>
  205.  
  206. <p>Tidy maps this to</p>
  207.  
  208. <pre>
  209.    <a href="#refs">References</a>
  210. </pre>
  211. </li>
  212.  
  213. <li><b>Perfecting lists by putting in tags missed out:</b> 
  214.  
  215. <pre>
  216.    <body>
  217.    <li>1st list item
  218.    <li>2nd list item
  219. </pre>
  220.  
  221. <p>is mapped to</p>
  222.  
  223. <pre>
  224.    <body>
  225.    <ul>
  226.    <li>1st list item</li>
  227.    <li>2nd list item</li>
  228.    </ul>
  229. </pre>
  230. </li>
  231.  
  232. <li><b>Missing quotes around attribute values are added</b> 
  233.  
  234. <p>Tidy inserts quote marks around all attribute values for you.
  235. It can also detect when you have forgotten the closing quote
  236. mark, although this is something you will have to fix
  237. yourself.</p>
  238. </li>
  239.  
  240. <li><b>Unknown/Proprietary attributes are reported</b> 
  241.  
  242. <p>Tidy has a comprehensive knowledge of the attributes defined
  243. in the HTML 4.0 recommendation from W3C. This often allows you to
  244. spot where you have mistyped an attribute or value.</p>
  245. </li>
  246.  
  247. <li><b>Proprietary elements are recognized and reported as
  248. such.</b> 
  249.  
  250. <p>Tidy will even work out which version of HTML you are using
  251. and insert the appropriate DOCTYPE element, as per the W3C
  252. recommendations.</p>
  253. </li>
  254.  
  255. <li><b>Tags lacking a terminating '>' are spotted</b> 
  256.  
  257. <p>This is something you then have to fix yourself as Tidy is
  258. unsure of where the > should be inserted.</p>
  259. </li>
  260. </ul>
  261.  
  262. <h3>Layout style</h3>
  263.  
  264. <p>You can choose which style you want Tidy to use when it
  265. generates the cleaned up markup: for instance whether you like
  266. elements to indent their contents or not. Several people have
  267. asked if Tidy could preserve the original layout. I am sorry to
  268. say that this would be very hard to support due to the way Tidy
  269. is implemented. Tidy starts by building a clean parse tree from
  270. the source file. The parse tree doesn't contain any information
  271. about the original layout. Tidy then pretty prints the parse tree
  272. using the current layout options. Trying to preserve the original
  273. layout would interact badly with the repair operations needed to
  274. build a clean parse tree and considerably complicate the
  275. code.</p>
  276.  
  277. <p>Some browsers can screw up the right alignment of text
  278. depending on how you layout headings. As an example,
  279. consider:</p>
  280.  
  281. <pre>
  282. <h1 align="right">
  283.   Heading
  284. </h1>
  285.  
  286. <h1 align="right">Heading</h1>
  287. </pre>
  288.  
  289. <p>Both of these should be rendered the same. Sadly a common
  290. browser bug fails to trim trailing whitespace and misaligns the
  291. first heading. HTML Tidy will protect you from this bug, except
  292. when you set the indent option to "yes".</p>
  293.  
  294. <p>Setting the indent option to yes can also cause problems with
  295. table layout for some browsers:</p>
  296.  
  297. <pre>
  298. <td><img src="foo.gif"></td>
  299. <td><img src="foo.gif"></td>
  300. </pre>
  301.  
  302. <p>will look slightly different from:</p>
  303.  
  304. <pre>
  305. <td>
  306.   <img src="foo.gif">
  307. </td>
  308. <td>
  309.   <img src="foo.gif">
  310. </td>
  311. </pre>
  312.  
  313. <p>You can avoid such quirks by using indent: no or
  314. indent: auto in the config file.</p>
  315.  
  316. <h3>Internationalization issues</h3>
  317.  
  318. <p>Tidy offers you a choice of character encodings: US ASCII, ISO
  319. Latin-1, UTF-8 and the ISO 2022 family of 7 bit encodings. The
  320. full set of HTML 4.0 entities are defined. Cleaned up output uses
  321. HTML entity names for characters when appropriate. Otherwise
  322. characters outside the normal range are output as numeric
  323. character entities. Tidy defaults to assuming you want the output
  324. to be in US ASCII. Tidy doesn't yet recognize the use of the HTML
  325. meta element for specifying the character encoding.</p>
  326.  
  327. <h3>Accessibility</h3>
  328.  
  329. <p>Tidy offers advice on accessibility problems for people using
  330. non-graphical browsers. The most common thing you will see is the
  331. suggestion you add a summary attribute to table elements. The
  332. idea is to provide a summary of the table's role and structure
  333. suitable for use with aural browsers.</p>
  334.  
  335. <h3>Cleaning up presentational markup</h3>
  336.  
  337. <p>Many tools generate HTML with an excess of FONT, NOBR and
  338. CENTER tags. Tidy's <em>-clean</em> option will replace them by
  339. style properties and rules using CSS. This makes the markup
  340. easier to read and maintain as well as reducing the file size!
  341. Tidy is expected to get smarter at this in the future.</p>
  342.  
  343. <p>Some pages rely on the presentation effects of isolated
  344. <p> or </p> tags.Tidy deletes empty paragraph and
  345. heading elements etc. The use of empty paragraph elements is not
  346. recommended for adding vertical whitespace. Instead use style
  347. sheets, or the <br> element. Tidy won't discard paragraphs
  348. only containg a nonbreaking space &nbsp;</p>
  349.  
  350. <h3>Teaching Tidy about new tags!</h3>
  351.  
  352. <p>You can teach Tidy about new tags by declaring them in the
  353. configuration file, the syntax is:</p>
  354.  
  355. <pre>
  356.   new-inline-tags: <em>tag1, tag2, tag3</em>
  357.   new-empty-tags: <em>tag1, tag2, tag3</em>
  358.   new-blocklevel-tags: <em>tag1, tag2, tag3</em>
  359. </pre>
  360.  
  361. <p>Note that the new tags can only appear where Tidy expects
  362. inline or block-level tags respectively. This means you can't
  363. (yet) place new tags within the document head or other contexts
  364. with restricted content models. So far the most popular use of
  365. this feature is to allow Tidy to be applied to Cold Fusion
  366. files.</p>
  367.  
  368. <p><i>I am working on ways to make it easy to customize the
  369. permitted document syntax using <a href= 
  370. "http://www.w3.org/People/Raggett/dtdgen/Docs">assertion
  371. grammars</a>, and hope to apply this to a much smarter version of
  372. Tidy for release later this year.</i></p>
  373.  
  374. <h3>Limited support for ASP</h3>
  375.  
  376. <p>Tidy is somewhat aware of the preprocessing language called
  377. ASP which uses a psuedo element syntax <% ... %>
  378. to include preprocessor directives. ASP is normally interpreted
  379. by the web server before delivery to the browser. Tidy will cope
  380. with ASP psuedo elements within element content and as
  381. replacements for attributes, for example:</p>
  382.  
  383. <pre>
  384.   <option <% if rsSchool.Fields("ID").Value
  385.     = session("sessSchoolID")
  386.     then Response.Write("selected") %>
  387.     value='<%=rsSchool.Fields("ID").Value%>'>
  388.     <%=rsSchool.Fields("Name").Value%>
  389.     (<%=rsSchool.Fields("ID").Value%>)
  390.   </option>
  391. </pre>
  392.  
  393. <p>Note that Tidy doesn't understand the scripting language used
  394. within ASP, and can easily get confused. Tidy may report missing
  395. attributes when these are hidden within ASP code. Tidy can also
  396. get things wrong if the ASP code includes quotemarks, e.g. if the
  397. example above is changed to:</p>
  398.  
  399. <pre>
  400.     value="<%=rsSchool.Fields("ID").Value%>"
  401. </pre>
  402.  
  403. <p>Tidy will now see the quotemark preceding ID as ending the
  404. attribute value, and proceed to complain about what follows. Note
  405. you can choose whether to allow line wrapping on spaces within
  406. ASP pseudo elements or not using the <tt>wrap-asp</tt>
  407. option.</p>
  408.  
  409. <h3>Support for XML</h3>
  410.  
  411. <p>XML processors compliant with W3C's XML 1.0 recommendation are
  412. very picky about which files they will accept. Tidy can help you
  413. to fix errors that cause your XML files to be rejected. Tidy
  414. doesn't yet recognize all XML features though, e.g. it doesn't
  415. yet understand CDATA sections or DTD subsets.</p>
  416.  
  417. <h3>Creating Slides</h3>
  418.  
  419. <p>The <em>-slides</em> option allows you to burst a single HTML
  420. file into a number of linked slides. Each H2 element in the input
  421. file is treated as delimiting the start of the next slide. The
  422. slides are named slide1.html, slide2.html, slide3.html etc. This
  423. is a relatively new feature and ideas are welcomed as to how to
  424. improve it. In particular, I plan to add support to the
  425. configuration file for setting the style sheet for slides and for
  426. customizing the slides via a template.</p>
  427.  
  428. <p>I would be interested in hearing from anyone who can offer
  429. help with using Javascript for adding dynamic effects to slides,
  430. for instance similar to those available in Microsoft
  431. PowerPoint.</p>
  432.  
  433. <h3>Indenting text for a better layout</h3>
  434.  
  435. <pre>
  436.  <html>
  437.    <head>
  438.    </head>
  439.    <body>
  440.      <p>
  441.        para which has enough text to cause a line break, and so test
  442.        the wrapping mechanism for long lines.
  443.      </p>
  444.  <pre>This is
  445.  <em>genuine
  446.        preformatted</em>
  447.     text
  448.  </pre>
  449.      <ul>
  450.        <li>
  451.          1st list item 
  452.        </li>
  453.        <li>
  454.          2nd list item
  455.        </li>
  456.      </ul>
  457.      <!-- end comment -->
  458.    </body>
  459.  </html>
  460. </pre>
  461.  
  462. <p>and this is the default style:</p>
  463.  
  464. <pre>
  465.  <html>
  466.  <head>
  467.  </head>
  468.  <body>
  469.  <p>para which has enough text to cause a line break, and so test
  470.  the wrapping mechanism for long lines.</p>
  471.  
  472.  <pre>This is
  473.  <em>genuine
  474.        preformatted</em>
  475.     text
  476.  </pre>
  477.  
  478.  <ul>
  479.  <li>1st list item </li>
  480.  
  481.  <li>2nd list item</li>
  482.  </ul>
  483.  
  484.  <!-- end comment -->
  485.  </body>
  486.  </html>
  487.  
  488. </pre>
  489.  
  490. <h3><a name="help">How to run tidy</a></h3>
  491.  
  492. <pre>
  493.    <font color=
  494. "maroon">tidy</font> <em>[[options] filename]*</em>
  495. </pre>
  496.  
  497. <p>HTML tidy is not (yet) a windows program. If you run tidy
  498. without any arguments, it will just sit there waiting to read
  499. markup on the stdin stream. Tidy's input and output default to
  500. stdin and stdout respectively. Errors are written to stderr but
  501. can be redirected to a file with the -f <em>filename</em>
  502. option.</p>
  503.  
  504. <p>I generally use the -m option to get tidy to update the
  505. original file, and if the file is particularly bad I also use the
  506. -f option to write the errors to a file to make it easier to
  507. review them. Tidy supports a small set of character encoding
  508. options. The default is ASCII, which makes it easy to edit markup
  509. in regular text editors.</p>
  510.  
  511. <p>For instance:</p>
  512.  
  513. <pre>
  514.    tidy -f errs.txt -m index.html
  515. </pre>
  516.  
  517. <p>which runs tidy on the file "index.html" updating it in place
  518. and writing the error messages to the file "errs.txt". Its a good
  519. idea to save your work before tidying it, as with all complex
  520. software, tidy may have bugs. If you find any please let me
  521. know!</p>
  522.  
  523. <p>Users running in Microsoft Windows should be aware that Dos
  524. doesn't expand wild cards in filenames. This means that if you
  525. have several html files in the same directory and want to tidy
  526. all of them:</p>
  527.  
  528. <pre>
  529.    tidy *.html
  530. </pre>
  531.  
  532. <p>won't work. You will see an error message: "can't open file
  533. *.html". Instead you need to run tidy separately on each one. I
  534. will look into a fix for this for a future release. A work around
  535. is to use the DOS <em>for</em> command, as in:</p>
  536.  
  537. <pre>
  538.    for %i in (*.html) do tidy %i
  539. </pre>
  540.  
  541. <p>Note: in a batch file that needs to be %%i instead of %i</p>
  542.  
  543. <p>Tidy writes errors to stderr, and won't be paused by the more
  544. command. A work around is to redirect stderr to stdout as
  545. follows. This works on Unix and Windows NT, but not on other
  546. platforms. My thanks to Markus Wolf for this tip!</p>
  547.  
  548. <pre>
  549.    tidy file.html 2>&1 | more
  550. </pre>
  551.  
  552. <h4>Tidy's Options</h4>
  553.  
  554. <p>To get a list of available options use:</p>
  555.  
  556. <pre>
  557.    tidy -help
  558. </pre>
  559.  
  560. <p>You should see something like this:</p>
  561.  
  562. <pre>
  563.    options for tidy vers: 14th April 1999
  564.  
  565.    <font color=
  566. "maroon">-config <em>file</em></font>        read config <em>file</em>
  567.    <font color="maroon">-indent</font> <i>or</i> <font color= 
  568. "maroon">-i</font>       indent element content
  569.    <font color="maroon">-omit</font> <i>or</i> <font color=
  570. "maroon">-o</font>         omit optional endtags
  571.    <font color=
  572. "maroon">-wrap 72</font>            wrap text at column 72 (default is 68)
  573.    <font color="maroon">-upper</font> <i>or</i> <font color= 
  574. "maroon">-u</font>        force tags to upper case (default is lower)
  575.    <font color="maroon">-clean</font> <i>or</i> <font color= 
  576. "maroon">-c</font>        replace font, nobr &amp; center tags by CSS
  577.    <font color=
  578. "maroon">-raw</font>                don't o/p entities for chars 128 to 255
  579.    <font color=
  580. "maroon">-ascii</font>              use ASCII for output, Latin-1 for input
  581.    <font color=
  582. "maroon">-latin1</font>             use Latin-1 for both input and output
  583.    <font color=
  584. "maroon">-utf8</font>               use UTF-8 for both input and output
  585.    <font color=
  586. "maroon">-iso2022</font>            use ISO2022 for both input and output
  587.    <font color="maroon">-numeric</font> <i>or</i> <font color= 
  588. "maroon">-n</font>      output numeric rather than named entities
  589.    <font color="maroon">-modify</font> <i>or</i> <font color= 
  590. "maroon">-m</font>       to modify original files
  591.    <font color="maroon">-errors</font> <i>or</i> <font color= 
  592. "maroon">-e</font>       show only error messages
  593.    <font color=
  594. "maroon">-f <em>file</em></font>             write errors to <em>file</em>
  595.    <font color=
  596. "maroon">-xml</font>                use this when input is in XML
  597.    <font color=
  598. "maroon">-asxml</font>              to convert HTML to XML
  599.    <font color=
  600. "maroon">-slides</font>             to burst into slides on h2 elements
  601.    <font color=
  602. "maroon">-help</font>               list command line options
  603. </pre>
  604.  
  605. <p>Input and Output default to stdin/stdout respectively. Single
  606. letter options apart from -f may be combined as in: tidy -f
  607. errs.txt -imu foo.html</p>
  608.  
  609. <p><i>A future extension under consideration would allow any of
  610. the config file options to also be use on the command line, using
  611. -- as the prefix for the option name. Unfortunately, I don't have
  612. time to implement this for this release. My thanks to Jochen M.
  613. Braun for the suggestion.</i></p>
  614.  
  615. <h3><a name="config">Using a Configuration File</a></h3>
  616.  
  617. <p>Tidy now supports a configuration file, and this is now much
  618. the most convenient way to configure Tidy. Assuming you have
  619. created a config file named "config.txt" (the name doesn't
  620. matter), you can instruct Tidy to use it via the command line
  621. option <tt>-config config.txt</tt>, e.g.</p>
  622.  
  623. <pre>
  624.    tidy -config config.txt file1.html file2.html
  625. </pre>
  626.  
  627. <p>Alternatively, you can name the default config file via the
  628. environment variable named "HTML_TIDY". Note this should be the
  629. absolute path since you are likely to want to run Tidy in
  630. different directories. You can also set a config file at compile
  631. time by defining CONFIG_FILE as the path string, see
  632. platform.h.</p>
  633.  
  634. <p>The following options are supported:</p>
  635.  
  636. <dl>
  637. <dt>markup: <em>bool</em></dt>
  638.  
  639. <dd>Determines whether Tidy generates a pretty printed version of
  640. the markup. Bool values are either <em>yes</em> or <em>no</em>.
  641. Note that Tidy won't generate a pretty printed version if it
  642. finds unknown tags, or missing trailing quotes on attribute
  643. values, or missing trailing '>' on tags. The default is <em>
  644. no</em>.</dd>
  645.  
  646. <dt>wrap: <em>number</em></dt>
  647.  
  648. <dd>Sets the right margin for line wrapping. Tidy tries to wrap
  649. lines so that they do not exceed this length. The default is
  650. 66.</dd>
  651.  
  652. <dt>tab-size: <em>number</em></dt>
  653.  
  654. <dd>Sets the number of columns between successive tab stops. The
  655. default is 4. It is used to map tabs to spaces when reading
  656. files. Tidy never outputs files with tabs.</dd>
  657.  
  658. <dt>indent: <em>no, yes</em> or <em>auto</em></dt>
  659.  
  660. <dd>If set to <em>yes</em> Tidy will indent block-level tags. The
  661. default is <em>no</em>. If set to <em>auto</em> Tidy will decide
  662. whether or not to indent the content of tags such as h1-h6, li,
  663. or p depending on whether or not the content includes a
  664. block-level element.</dd>
  665.  
  666. <dt>indent-spaces: <em>number</em></dt>
  667.  
  668. <dd>Sets the number of spaces to indent content when indentation
  669. is enabled. The default is 2 spaces.</dd>
  670.  
  671. <dt>indent-attributes: <em>bool</em></dt>
  672.  
  673. <dd>If set to <em>yes</em>, each attribute will begin on a new
  674. line. The default is <em>no</em>.</dd>
  675.  
  676. <dt>hide-endtags: <em>bool</em></dt>
  677.  
  678. <dd>If set to <em>yes</em>, optional end-tags will be omitted
  679. when generating the pretty printed markup. This option is ignored
  680. if you are outputting to XML. The default is <em>no</em>.</dd>
  681.  
  682. <dt>input-xml: <em>bool</em></dt>
  683.  
  684. <dd>If set to <em>yes</em>, Tidy will use the XML parser rather
  685. than the error correcting HTML parser. The default is <em>
  686. no</em>.</dd>
  687.  
  688. <dt>output-xml: <em>bool</em></dt>
  689.  
  690. <dd>If set to <em>yes</em>, Tidy will use generate the pretty
  691. printed output writing it as well-formed XML. Any entities not
  692. defined in XML 1.0 will be written as numeric entities to allow
  693. them to be parsed by an XML parser. The tags and attributes will
  694. be in the case used in the input document, regardless of other
  695. options. The default is <em>no</em>.</dd>
  696.  
  697. <dt>add-xml-pi: <em>bool</em></dt>
  698.  
  699. <dd>If set to <em>yes</em>, Tidy will use add the XML processing
  700. instruction when outputting XML or XHTML. The default is <em>
  701. yes</em>. Note that if the input document includes an XML PI,
  702. then it will appear in the output independent of the value of
  703. this option.</dd>
  704.  
  705. <dt>output-xhtml: <em>bool</em></dt>
  706.  
  707. <dd>If set to <em>yes</em>, Tidy will use generate the pretty
  708. printed output writing it as extensible HTML. The default is <em>
  709. no</em>. This option causes Tidy to set the doctype and default
  710. namespace as appropriate to XHTML. If a doctype or namespace is
  711. given they will checked for consistency with the content of the
  712. document. In the case of an inconsistency, the corrected values
  713. will appear in the output. For XHTML, entities can be written as
  714. named or numeric entities according to the value of the
  715. "numeric-entities" property. he tags and attributes will be
  716. output in the case used in the input document, regardless of
  717. other options.</dd>
  718.  
  719. <dt>doctype: <em>omit, auto, strict, loose</em> or
  720. <<em>fpi</em>></dt>
  721.  
  722. <dd>This property controls the doctype declaration generated by
  723. Tidy. If set to <em>omit</em> the output file won't contain a
  724. doctype declaration. If set to <em>auto</em> (the default) Tidy
  725. will use an educated guess based upon the contents of the
  726. document. If set to <em>strict</em>, Tidy will set the doctype to
  727. the strict DTD. If set to <em>loose</em>, the doctype is set to
  728. the loose (transitional) DTD. Alternatively, you can supply a
  729. string for the formal public identifier (fpi) for example:</dd>
  730.  
  731. <dd>
  732. <pre>
  733.     doctype: "-//ACME//DTD HTML 3.14159//EN"
  734. </pre>
  735. </dd>
  736.  
  737. <dd>If you specify the fpi for an XHTML document, Tidy will set
  738. the system identifier to the empty string. Tidy leaves the
  739. document type for generic XML documents unchanged.</dd>
  740.  
  741. <dt>char-encoding: <em>raw, ascii, latin1, utf8</em> or <em>
  742. iso2022</em></dt>
  743.  
  744. <dd>Determines how Tidy interprets character streams. For <em>
  745. ascii</em>, Tidy will accept Latin-1 character values, but will
  746. use entities for all characters whose value > 127. For <em>
  747. raw</em>, Tidy will output values above 127 without translating
  748. them into entities. For <em>latin1</em> characters above 255 will
  749. be written as entities. For <em>utf8</em>, Tidy assumes that both
  750. input and output is encoded as UTF-8. You can use <em>
  751. iso2022</em> for files encoded using the ISO2022 family of
  752. encodings e.g. ISO 2022-JP. The default is <em>ascii</em></dd>
  753.  
  754. <dt>numeric-entities: <em>bool</em></dt>
  755.  
  756. <dd>Causes entities other than the basic XML 1.0 named entities
  757. to be written in the numeric rather than the named entity form.
  758. The default is <em>no</em></dd>
  759.  
  760. <dt>quote-marks: <em>bool</em></dt>
  761.  
  762. <dd>If set to yes, this causes " characters to be written out as
  763. &quot; as is preferred by some editing environments. The
  764. apostrophe character ' is written out as &#39; since many web
  765. browsers don't yet support &apos;. The default is <em>
  766. no</em>.</dd>
  767.  
  768. <dt>quote-nbsp: <em>bool</em></dt>
  769.  
  770. <dd>If set, this causes non-breaking space characters to be
  771. written out as enities. The default is <em>yes</em>.</dd>
  772.  
  773. <dt>quote-ampersand: <em>bool</em></dt>
  774.  
  775. <dd>If set to yes, this causes unadorned & characters to be
  776. written out as &amp;. The default is <em>yes</em>.</dd>
  777.  
  778. <dt>fix-backslash: <em>bool</em></dt>
  779.  
  780. <dd>If set to yes, this causes backslash characters "\" in URLs
  781. to be replaced by forward slashes "/". The default is <em>
  782. yes</em>.</dd>
  783.  
  784. <dt>wrap-script-literals: <em>bool</em></dt>
  785.  
  786. <dd>If set to yes, this allows lines to be wrapped within string
  787. literals that appear in script attributes. The default is <em>
  788. no</em>. The example shows how Tidy wraps a really really long
  789. script string literal inserting a backslash character before the
  790. linebreak: 
  791.  
  792. <pre>
  793. <a href="somewhere.html" onmouseover="document.status = '...some \
  794. really, really, really, really, really, really, really, really, \
  795. really, really long string..';">test</a>
  796. </pre>
  797. </dd>
  798.  
  799. <dt>wrap-asp: <em>bool</em></dt>
  800.  
  801. <dd>If set to no, this prevents lines from being wrapped within
  802. ASP psuedo elements. The default is <em>yes</em>.</dd>
  803.  
  804. <dt>break-before-br: <em>bool</em></dt>
  805.  
  806. <dd>If set, Tidy will output a line break before each <br>
  807. element. The default is <em>no</em>.</dd>
  808.  
  809. <dt>uppercase-tags: <em>bool</em></dt>
  810.  
  811. <dd>Causes tag names to be output in upper case. The default is
  812. <em>no</em> resulting in lowercase, except for XML input where
  813. the original case is preserved.</dd>
  814.  
  815. <dt>uppercase-attributes: <em>bool</em></dt>
  816.  
  817. <dd>Causes attribute names to be output in upper case. The
  818. default is <em>no</em> resulting in lowercase, except for XML
  819. where the original case is preserved.</dd>
  820.  
  821. <dt>clean: <em>bool</em></dt>
  822.  
  823. <dd>If set, causes Tidy to strip out surplus presentational tags
  824. and attributes replacing them by style rules and structural
  825. markup as appropriate. It works well on the html saved from
  826. Microsoft Office'97. I hope to work on cleaning up after Office
  827. 2000 in a future release. The default is <em>no</em>.</dd>
  828.  
  829. <dt>drop-font-tags: <em>bool</em></dt>
  830.  
  831. <dd>If set together with the clean option (see above), Tidy will
  832. discard font and center tags rather than creating the
  833. corresponding style rules. The default is <em>no</em>.</dd>
  834.  
  835. <dt>write-back: <em>bool</em></dt>
  836.  
  837. <dd>If set, Tidy will write back the tidied markup to the same
  838. file it read from. The default is <em>no</em>. You are advised to
  839. keep copies of important files before tidying them as on rare
  840. occasions the result may not always be what you expect.</dd>
  841.  
  842. <dt>error-file: <em>filename</em></dt>
  843.  
  844. <dd>Writes errors and warnings to the named file rather than to
  845. stderr.</dd>
  846.  
  847. <dt>show-warnings: <em>bool</em></dt>
  848.  
  849. <dd>If set to no, warnings are suppressed. This can be useful
  850. when a few errors are hidden in a flurry of warnings. The default
  851. is <em>yes</em>.</dd>
  852.  
  853. <dt>split: <em>bool</em></dt>
  854.  
  855. <dd>If set to <em>yes</em> Tidy will use the input file to create
  856. a sequence of slides, splitting the markup prior to each
  857. successive <h2>. You can see an example of the results in a
  858. <a href="http://www.w3.org/Talks/1999/03/23-stockholm-xhtml">
  859. recent talk I made on XHTML</a>. The slides are written to
  860. "slide1.html", "slide2.html" etc. The default is <em>
  861. no</em>.</dd>
  862.  
  863. <dt>new-empty-tags: <em>tag1, tag2, tag3</em></dt>
  864.  
  865. <dd>Use this to declare new empty inline tags. The option takes a
  866. space or comma separated list of tag names. Unless you declare new
  867. tags, Tidy will refuse to generate a tidied file if the input
  868. includes previously unknown tags.</dd>
  869.  
  870. <dt>new-inline-tags: <em>tag1, tag2, tag3</em></dt>
  871.  
  872. <dd>Use this to declare new non-empty inline tags. The option takes
  873. a space or comma separated list of tag names. Unless you declare
  874. new tags, Tidy will refuse to generate a tidied file if the input
  875. includes previously unknown tags</dd>
  876.  
  877. <dt>new-blocklevel-tags: <em>tag1, tag2, tag3</em></dt>
  878.  
  879. <dd>Use this to declare new block-level tags. The option takes a
  880. space or comma separated list of tag names. Unless you declare
  881. new tags, Tidy will refuse to generate a tidied file if the input
  882. includes previously unknown tags. Note you can't as yet add new
  883. empty elements (similar to hr) and you can't change the content
  884. model for elements such as table, ul, ol and dl. This is
  885. explained in more detail in the <a href="release-notes.html">
  886. release notes</a></dd>
  887. </dl>
  888.  
  889. <h4>Sample Config File</h4>
  890.  
  891. <pre>
  892. // sample config file for HTML tidy
  893. indent: auto
  894. indent-spaces: 2
  895. wrap: 72
  896. markup: yes
  897. clean: yes
  898. output-xml: no
  899. input-xml: no
  900. show-warnings: yes
  901. numeric-entities: yes
  902. quote-marks: yes
  903. quote-nbsp: yes
  904. quote-ampersand: no
  905. break-before-br: no
  906. uppercase-tags: no
  907. uppercase-attributes: no
  908. output-xhtml: yes
  909. char-encoding: latin1
  910. </pre>
  911.  
  912. <h3><a name="scripts">Using Tidy from scripts</a></h3>
  913.  
  914. <p>If you want to run Tidy from a Perl or other scripting
  915. language you may find it of value to inspect the result returned
  916. by Tidy when it exits: 0 if everything is fine, 1 if there were
  917. warnings and 2 if there were errors. This is an example using
  918. Perl:</p>
  919.  
  920. <pre>
  921. if (close(TIDY) == 0) {
  922.   my $exitcode = $? >> 8;
  923.   if ($exitcode == 1) {
  924.     printf STDERR "tidy issued warning messages\n";
  925.   } elsif ($exitcode == 2) {
  926.     printf STDERR "tidy issued error messages\n";
  927.   } else {
  928.     die "tidy exited with code: $exitcode\n";
  929.   }
  930. } else {
  931.   printf STDERR "tidy detected no errors\n";
  932. }
  933. </pre>
  934.  
  935. <h3><a name="download">Downloadable Binaries</a></h3>
  936.  
  937. <p class="note">If you are prepared to maintain a public URL for
  938. HTML Tidy compiled for a specific platform, please let me know so
  939. that I can add a link to your page. This will avoid the need for
  940. me to update this page whenever you recompile.</p>
  941.  
  942. <p><b><a href="http://www.chami.com/free/html-kit/">Windows
  943. users</a></b>! A free graphical user interface (HTML-Kit) for
  944. HTML Tidy is now available for windows 95/98/NT. Alternatively,
  945. you can get tidy in its native form as a Windows (win32) console
  946. program: <a href="http://www.w3.org/People/Raggett/tidy.exe"><b>
  947. tidy.exe</b></a>, with the command options as per above. A
  948. version of Tidy for Windows 3.11 is in preparation.</p>
  949.  
  950. <p><b><a href= 
  951. "http://www.geocities.com/SiliconValley/1057/tidy.html">Mac
  952. users</a></b>! You can now run <a href= 
  953. "http://www.geocities.com/SiliconValley/1057/tidy.html">HTML Tidy
  954. with FilterTop</a> (<a href= 
  955. "http://www.geocities.com/SiliconValley/1057/images/TidyHTML.GIF">
  956. Screenshot</a>), or as a command line interface application. My
  957. thanks to <a href="mailto:teague@macbroker.com">Terry Teague</a>
  958. for this port.</p>
  959.  
  960. <p><b><a href=
  961. "http://www.amiga.u-net.com/MadDogSoftware/Tidy.html">Amiga
  962. users</a></b>! Keith Blakemore-Noble has compiled Tidy for the
  963. Amiga.</p>
  964.  
  965. <p><b><a href= 
  966. "http://www-frec.bull.com/cgi-bin/list_dir.cgi/download/">AIX
  967. executable for Tidy</a></b>! Compiled by Ciaran Deignan. The link
  968. is to a general download page. The executable is available for
  969. AIX 4.3.2 and later.</p>
  970.  
  971. <p><b><a href="http://perso.club-internet.fr/dpo/rpm/">Tidy RPM
  972. Package</a></b> for Redhat Linux, maintained by <i>Dimitri
  973. Papadopoulos</i>. Tidy may also be available from other Linux
  974. distribution sites, e.g. <a href="http://rpmfind.net/">
  975. http://rpmfind.net/</a></p>
  976.  
  977. <!-- no longer accessible :-( 
  978. <p><b><a href= 
  979. "http://www.astro.uni-bonn.de/~webstw/cm/w3c_tidy/index.html">
  980. Linux users</a></b>! ochen M. Braun is maintaining Tidy binary
  981. for Linux (ELF 32-bit LSB executable using '<tt>libc.so.5</tt>'
  982. for Intel 80386): '<a href= 
  983. "ftp://ftp.astro.uni-bonn.de/pub/webstw/linsoft/tidy"><tt>tidy</tt></a>
  984. '. Additionally a man page can be downloaded: <a href= 
  985. "ftp://ftp.astro.uni-bonn.de/pub/webstw/linsoft/tidy.1"><tt>
  986. tidy.1</tt></a>.</p>
  987.  -->
  988.  
  989. <p><b><a href="http://www.ocston.org/~simon/tidy/">Tidy for
  990. UnixWare</a></b>! <a href="mailto:simon@ocston.org">Simon
  991. Trimmer</a> is maintaining a Tidy binary for Unixware.</p>
  992.  
  993. <p><b><a href="http://members.xoom.com/nickbeee/tidy386/">
  994. Tidy386</a></b> for DOS, maintained by <i>Nick B</i>. This
  995. exploits the DPMI mechanism for the memory management.</p>
  996.  
  997. <h3><a name="quotes">Integrating Tidy as part of other
  998. Software</a></h3>
  999.  
  1000. <p>You can also incorporate Tidy as part of a larger program, for
  1001. instance in HTML editors or HTML transformation tools used for
  1002. import filters, or for when you want to customize Web content to
  1003. get the best out of different kinds of browsers. Imagine
  1004. authoring clean HTML with CSS and at a touch of a button
  1005. producing variants that look great and work reliably on a large
  1006. variety of different browsers, taking into account the quirks of
  1007. each. For instance, providing the ability to tune content for
  1008. different versions of Netscape and Internet Explorer, and for
  1009. browsers running on set-top boxes for televisions, handheld and
  1010. palmtop devices, cellphones, and voice browsers. I am happy to
  1011. quote for software development for such tools.</p>
  1012.  
  1013. <h3><a name="java">Java port of HTML Tidy</a></h3>
  1014.  
  1015. <p><a href="mailto:ac.quick@sympatico.ca">Andy Quick</a> has
  1016. ported Tidy to Java, so that you can now integrate Tidy into your
  1017. Java applications. More information is available on <a href= 
  1018. "http://www3.sympatico.ca/ac.quick">Andy's home page</a>. Andy
  1019. writes:</p>
  1020.  
  1021. <blockquote><i>It uses some nice features of Java, such as
  1022. resource bundles (for internationalization). The current state of
  1023. the project is: I have ran a few simple tests, and it seems to
  1024. work. In other words, it is beta software :-) I still have to
  1025. implement the clean functionality (from clean.c) and do a lot
  1026. more testing. I would be willing to bring the Java version to a
  1027. stable version. After that, I may be interested in supporting it,
  1028. but I could at least pass it on to somebody who is interested in
  1029. supporting it.</i></blockquote>
  1030.  
  1031. <h3><a name="implementation">Implementation details</a></h3>
  1032.  
  1033. <p>The code is in ANSI C and uses the C standard library for i/o.
  1034. The parser works top down, building a complete parse tree in
  1035. memory. Document text is held as Unicode represented as UTF-8 in
  1036. a character buffer that expands as needed. The code has so far
  1037. been tested on Windows'95, Windows'98, Windows NT, Linux,
  1038. FreeBSD, NetBSD, Ultrix, OSF, OS/MP, IRIX, NeXtStep, MacOS, BeOS,
  1039. OS2, AIX, Amiga, SunOS, Solaris, IRIX and HP-UX, amongst
  1040. others.</p>
  1041.  
  1042. <dl>
  1043. <dt><a href="../tidy7jul99.tgz">tidy7jul99.tgz</a></dt>
  1044.  
  1045. <dd>gzipped tar file for source code (Unix line ends)</dd>
  1046.  
  1047. <dt><a href="../tidy7jul99.zip">tidy7jul99.zip</a></dt>
  1048.  
  1049. <dd>zipped source code (Windows line ends)</dd>
  1050.  
  1051. <dt><a href="http://www.w3.org/People/Raggett/tidy.exe">
  1052. tidy.exe</a></dt>
  1053.  
  1054. <dd>Windows 95/NT executable (32-bit Windows console-mode
  1055. program)</dd>
  1056.  
  1057. <dt><a href=
  1058. "http://www.w3.org/People/Raggett/tidy17dec98.ppc.tgz">
  1059. tidy17dec98.ppc.tgz</a></dt>
  1060.  
  1061. <dd>Gzipped archive of the binary for BeOS PPC R4. It also
  1062. contains complete tidy distribution and Makefile.BeOS file for
  1063. BeOS (from 17dec98 release of tidy).</dd>
  1064.  
  1065. <dt><a href=
  1066. "http://www.dd.iij4u.or.jp/~kshimz/warp/tidy/tidy.zip">Tidy on
  1067. OS/2</a></dt>
  1068.  
  1069. <dd>Zipped archive of the OS/2 release of tidy, as compiled by
  1070. Kaz SHiMZ <<a href=
  1071. "mailto:kshimz@sfc.co.jp">kshimz@sfc.co.jp</a>></dd>
  1072.  
  1073. <dt><a href="platform.h">platform.h</a>, <a href="html.h">
  1074. html.h</a></dt>
  1075.  
  1076. <dd>the include files with common definitions</dd>
  1077.  
  1078. <dt><a href="config.c">config.c</a></dt>
  1079.  
  1080. <dd>support for customizing Tidy via config files</dd>
  1081.  
  1082. <dt><a href="lexer.c">lexer.c</a></dt>
  1083.  
  1084. <dd>lexical analysis and buffer management</dd>
  1085.  
  1086. <dt><a href="parser.c">parser.c</a></dt>
  1087.  
  1088. <dd>HTML and XML parsers</dd>
  1089.  
  1090. <dt><a href="tags.c">tags.c</a></dt>
  1091.  
  1092. <dd>dictionary of tags and their properties</dd>
  1093.  
  1094. <dt><a href="attrs.c">attrs.c</a></dt>
  1095.  
  1096. <dd>dictionary of attributes and their properties</dd>
  1097.  
  1098. <dt><a href="istack.c">istack.c</a></dt>
  1099.  
  1100. <dd>stack of active inline elements</dd>
  1101.  
  1102. <dt><a href="entities.c">entities.c</a></dt>
  1103.  
  1104. <dd>dictionary of entities</dd>
  1105.  
  1106. <dt><a href="clean.c">clean.c</a></dt>
  1107.  
  1108. <dd>smarts for cleaning up presentational markup</dd>
  1109.  
  1110. <dt><a href="pprint.c">pprint.c</a></dt>
  1111.  
  1112. <dd>pretty printing for HTML and XML</dd>
  1113.  
  1114. <dt><a href="localize.c">localize.c</a></dt>
  1115.  
  1116. <dd>Change this file to localize tidy's messages</dd>
  1117.  
  1118. <dt><a href="tidy.c">tidy.c</a></dt>
  1119.  
  1120. <dd>main() and error reporting routines</dd>
  1121.  
  1122. <dt><a href="Makefile">Makefile</a></dt>
  1123.  
  1124. <dd>Makefile for gcc</dd>
  1125. </dl>
  1126.  
  1127. <p>Conventions for whether lines end with CRLF, LF or CR vary
  1128. from one system to another. I have included the C source for a
  1129. utility <b>tab2space</b> which can be used to ensure that files
  1130. use the line end convention of your choice, and to expand tabs to
  1131. spaces.</p>
  1132.  
  1133. <pre>
  1134.    tab2space -t4 -unix *.h *.c
  1135.    tab2space -tabs -unix Makefile
  1136. </pre>
  1137.  
  1138. <p>Note use of "-tabs" to ensure that tabs are preserved in the
  1139. Makefile (it won't work without them!).</p>
  1140.  
  1141. <p>For those of you on Unix, here is a script you can use to
  1142. strip carriage returns:</p>
  1143.  
  1144. <pre>
  1145. #!/bin/sh
  1146. echo Stripping Carriage Returns from files...
  1147. for i
  1148. do
  1149.         # If a writable file
  1150.         if [ -f $i ]
  1151.         then
  1152.                 if [ -w $i ]
  1153.                 then
  1154.                         echo $i
  1155.                         # strip CRs from input and output to temp file
  1156.                         tr -d '\015' < $i > toix.tmp
  1157.                         mv toix.tmp $i
  1158.                 else
  1159.                         echo $i: write-protected
  1160.                 fi
  1161.         else
  1162.                 echo $i: not a file
  1163.         fi
  1164. done
  1165. </pre>
  1166.  
  1167. <p>Save this script to a file, e.g. "<em>scripcr</em>" and use
  1168. "<em>chmod +x stripcr</em>" to make it executable. You can then
  1169. run it as "<em>stripcr *.c *.h Overview.html Makefile</em>"</p>
  1170.  
  1171. <h2><a name="acks">Acknowledgements</a></h2>
  1172.  
  1173. <p>I would like to thank the many people who have written to me
  1174. with suggestions for improvements or reporting bugs. Your help
  1175. has been invaluable.</p>
  1176.  
  1177. <blockquote class="people">Drew Adams, Osma Ahvenlampi, Carsten
  1178. Allefeld, Jacob Sparre Andersen, Joe D'Andrea, Jerry Andrews,
  1179. Bruce Aron, Nick B, Chang Hyun Baek, Nick B, Chuck Baslock,
  1180. Christer Bernerus, Alexander Biron, Keith Blakemore-Noble, Eric
  1181. Blossom, ochen M. Braun, David Brooke, Andy Brown, Keith B.
  1182. Brown, Andreas Buchholz, Maurice Buxton, Jelks Cabaniss, Trevor
  1183. Carden, Terry Cassidy, Mathew Cepl, Kendall Clark, Jeremy Clulow,
  1184. Dan Connolly, Ken Cox, Keith Davies, Ciaran Deignan, Bodo Eing,
  1185. David Fallon, Claus André Färber, Stephanie Foott,
  1186. Darren Forcier, Frederik Fouvry, Rene Fritz, Martin Gallwey, Francisco
  1187. Guardiola, David Getchell, Michael Giroux, Guus Goos, Léa Gris,
  1188. Francisco Guardiola, Juha Häikiö, Bjoern Hoehrmann, G.
  1189. Ken Holman, Bill Homer, Craig Horman, Jack Horsfield, Marc
  1190. Jauvin, Rick Jelliffe, Peter Jeremy, Craig Johnson, Charles
  1191. LaFountain, Steven Lobo, Zdenek Kabelac, Michael Kay, Axel
  1192. Kielhorn, Johannes Koch, Rudy Kohut, Allan Kuchinsky, Volker
  1193. Kuhlmann, Steve Lee, Tony Leneis, Nick Leverton, Dietmar Lippold,
  1194. Gert-Jan C. Lokhorst, Anton Marsden, Bede McCall, Shane McCarron,
  1195. Ian McKellar, Chris Nappin, Ann Navarro, Allan Odgaard, Matt
  1196. Oshry, Gerald Oskoboiny, Paul Ossenbruggen, Ernst Paalvast,
  1197. Christian Pantel, Dimitri Papadopoulos, Steven Pemberton, Lee
  1198. Anne Phillips, Xavier Plantefeve, Karl Prinz, Andy Quick, Ross L.
  1199. Richardson, Philip Riebold, Erik Rossen, Dan Rudman, Christian
  1200. Ruetgers, Klaus Johannes Rusch, Eric Schindler, J. Schlauch,
  1201. Christian Schüler, Klaus Alexander Seistrup, Jim Seymour,
  1202. Kazuyoshi Shimizu, Geoff Sinclair, Jo Smith, Paul Smith, Steve
  1203. Spilker, Rafi Stern, Michael J. Suzio, Oren Tirosh, John Tobler,
  1204. Loïc Trégan, Simon Trimmer, Steffen Ullrich, Stuart
  1205. Updegrave, Charles A. Upsdell, Jussi Vestman, Larry W. Virden,
  1206. Daniel Vogelheim, Jez Wain, Paul Ward, Jeff Young, Christian
  1207. Zuckschwerdt</blockquote>
  1208.  
  1209. <p><small><a href="http://www.w3.org/People/Raggett">Dave
  1210. Raggett</a> <<a href="mailto:dsr@w3.org">dsr@w3.org</a>> is
  1211. an engineer from <a href="http://www.hp.com/">Hewlett
  1212. Packard</a>'s <a href="http://www.hpl.hp.co.uk">UK
  1213. Laboratories</a>, and works on assignment to the World Wide Web
  1214. Consortium, where he is the W3C lead for HTML, Math and Voice
  1215. Browsers.</small></p>
  1216. </body>
  1217. </html>
  1218.  
  1219.